home *** CD-ROM | disk | FTP | other *** search
/ Programmer Power Tools / Programmer Power Tools.iso / dirutl / chngfil.asm < prev    next >
Assembly Source File  |  1986-06-13  |  3KB  |  159 lines

  1. ---------------------------- CHNGFIL.DOC (cut here) ---------------------------
  2. Use CHNGFIL.COM to change a file's attributes.
  3.  
  4. Syntax: CHNGFIL filename [/R] [/H] [/S]
  5.  
  6. /R = read-only        /H = hidden        /S = system
  7.  
  8. 1) If a switch is not included, then the corresponding attribute is not set.
  9. 2) The filename may be wildcarded.
  10.  
  11. Example:
  12. CHNGFIL *.C /R
  13. Changes all files in current directory with .c extension to read-only.
  14. ------------------------ end of CHNGFIL.DOC (cut here) ------------------------
  15.  
  16. ---------------------------- CHNGFIL.ASM (cut here) ---------------------------
  17. ;Program to change file attributes
  18. ;by Robert Lenoil; August 23, 1984
  19.  
  20. ;Placed in the public domain, June 1986.
  21. ;Author's electronic mail address:
  22. ;USENET: lenoil@mit-eddie.uucp        ARPA: lenoil@eddie.mit.edu
  23.  
  24. CODE    SEGMENT
  25. ASSUME    CS:CODE,DS:CODE
  26.  
  27. ;data:
  28. ORG    80H
  29. CMDLEN    DB    ?            ;command line length
  30.  
  31. ORG    100H
  32. START:    JMP    BEGIN
  33.  
  34. ATTRIB    DB    0            ;attribute to change to
  35. FNSTART    DW    ?            ;start of fname on cmd line
  36. FNLEN    DW    ?            ;end of filename
  37. FPTR    DW    ?            ;where to put returned filename
  38. PATHSTR    DB    78 DUP (?)        ;where the path will live
  39. DTA    DB    128 DUP (?)        ;disk transfer address
  40. ERR1MSG    DB    'Proper syntax: CHNGFIL filename [/R][/H][/S]$'
  41.  
  42. ;code:
  43. BEGIN:    CLD                ;eat leading spaces
  44.     MOV    SI,81H
  45.     MOV    AH,32
  46. EAT:    LODSB
  47.     DEC    CMDLEN
  48.     JS    ER1JMP
  49.     CMP    AL,AH
  50.     JE    EAT
  51.     INC    CMDLEN
  52.     DEC    SI
  53.     MOV    FNSTART,SI
  54.     MOV    DI,SI
  55.     MOV    AL,AH            ;search for end of fname
  56.     SUB    CX,CX
  57.     MOV    CL,CMDLEN
  58.     SUB    DX,DX
  59.     REPNE    SCASB
  60.     JNE    L1
  61.     INC    DX
  62.     DEC    DI
  63. L1:    MOV    BX,DI
  64.     SUB    BX,FNSTART
  65.     MOV    FNLEN,BX
  66.     MOV    BYTE PTR [DI],0
  67.     TEST    DX,DX
  68.     JZ    SEARCH            ;no attributes on cmd line
  69.     MOV    AX,3700H        ;get system switch character into DL
  70.     INT    21H
  71.     MOV    SI,DI            ;scan for switches
  72.     INC    SI
  73. SCAN:    LODSB
  74.     CMP    AL,13            ;end of cmd line?
  75.     JE    SEARCH
  76.     CMP    AL,32            ;eat spaces
  77.     JE    SCAN
  78.     CMP    AL,DL            ;switch?
  79.     JE    SCAN1
  80. ER1JMP:    JMP    ERROR1
  81. SCAN1:    LODSB
  82.     AND    AL,0DFH
  83.     MOV    BL,1
  84.     CMP    AL,'R'
  85.     JE    SCAN2
  86.     SHL    BX,1
  87.     CMP    AL,'H'
  88.     JE    SCAN2
  89.     SHL    BX,1
  90.     CMP    AL,'S'
  91.     JNE    ER1JMP
  92. SCAN2:    OR    ATTRIB,BL
  93.     JMP    SHORT    SCAN
  94.  
  95. SEARCH:    MOV    SI,FNSTART        ;does name have drive letter or path?
  96.     ADD    SI,FNLEN
  97.     STD
  98.     DEC    SI
  99. SLOOP:    LODSB
  100.     CMP    AL,'/'
  101.     JE    PATH
  102.     CMP    AL,'\'
  103.     JE    PATH
  104.     CMP    AL,':'
  105.     JE    PATH
  106.     CMP    SI,FNSTART
  107.     JA    SLOOP
  108.     MOV    FPTR,OFFSET PATHSTR
  109.     JMP    SHORT DOCHNG
  110.  
  111. PATH:    INC    SI            ;copy pathname to pathstr
  112.     MOV    CX,SI
  113.     MOV    SI,FNSTART
  114.     SUB    CX,SI
  115.     INC    CX
  116.     MOV    FPTR,CX
  117.     MOV    DI,OFFSET PATHSTR
  118.     ADD    FPTR,DI
  119.     CLD
  120.     REP    MOVSB
  121.  
  122. DOCHNG:    MOV    AH,1AH            ;set DTA
  123.     MOV    DX,OFFSET DTA
  124.     INT    21H
  125.     MOV    AH,4EH            ;search for file(s)
  126.     MOV    DX,FNSTART
  127.     MOV    CX,7
  128.     JMP    SHORT CLOOP1
  129. CLOOP:    MOV    AH,4FH
  130. CLOOP1:    INT    21H
  131.     MOV    AL,0
  132.     JC    EXIT            ;no more files
  133.  
  134.     MOV    SI,OFFSET DTA + 30    ;copy fname to end of pathstr
  135.     MOV    DI,FPTR
  136.     MOV    CX,13
  137.     CLD
  138.     REP    MOVSB
  139.  
  140.     MOV    AX,4301H        ;perform attribute change
  141.     MOV    DX,OFFSET PATHSTR
  142.     MOV    CL,DTA[21]        ;leave modified flag untouched
  143.     AND    CL,0F8H
  144.     OR    CL,ATTRIB
  145.     INT    21H
  146.     JMP    SHORT CLOOP
  147.  
  148. ERROR1:    MOV    DX,OFFSET ERR1MSG
  149. ERROR:    MOV    AH,9
  150.     INT    21H
  151.     MOV    AL,1
  152. EXIT:    MOV    AH,4CH
  153.     INT    21H
  154.  
  155. CODE    ENDS
  156.  
  157. END    START
  158. ------------------------ end of CHNGFIL.ASM (cut here) ------------------------
  159.